package com.magina.calendario;

/**
 * Created by IntelliJ IDEA.
 * User: marcioat
 * Date: 23/05/11
 * Time: 23:14
 */

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;

import java.util.Calendar;


public class frmListarEvento extends ListActivity
{
    private Button btnGetDate;
    private Button btnGravar;
    private Button btnCategoria;

    private Cursor myCursor;
    private Cursor mCursor;

    private int mYear;
    private int mMonth;
    private int mDay;

    static final int DATE_DIALOG_ID = 1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.frm_evento_listar);

        Calendar mcal = Calendar.getInstance();
        mYear = mcal.get(Calendar.YEAR);
        mMonth =  mcal.get(Calendar.MONTH);
        mDay = mcal.get(Calendar.DAY_OF_MONTH);

        myCursor = this.getContentResolver().query(CategoriaProvider.Categoria.CONTENT_URI, null, null, null, null);
        this.startManagingCursor(myCursor);


        btnCategoria = (Button) findViewById(R.id.btnGetCategoria);
        btnCategoria.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                final Dialog dialog;
                AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
                builder.setTitle("Selecione uma categoria");

                ListAdapter adapter = new SimpleCursorAdapter(
                        // O primeiro parametro eh o context.
                        v.getContext(),
                        // O segundo, o layout de cada item.
                        R.layout.list_item,
                        // O terceiro parametro eh o cursor que contem os dados
                        // a serem mostrados
                        myCursor,
                        // o quarto parametro eh um array com as colunas do cursor
                        // que serao mostradas
                        new String[]{CategoriaProvider.Categoria.TEXT},
                        // o quinto parametro eh um array (com o mesmo tamanho
                        // do anterior) com os elementos que receberao
                        // os dados.
                        new int[]{R.id.txtCategoGrid});


                ListView lstCategoria = new ListView(v.getContext());
                lstCategoria.setAdapter(adapter);

                builder.setView(lstCategoria);
                dialog = builder.create();
                dialog.show();

                lstCategoria.setOnItemClickListener(
                        new AdapterView.OnItemClickListener() {
                            public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
                                btnCategoria.setText(myCursor.getString(1));
                                dialog.dismiss();
                                if((!btnGetDate.getText().toString().equals("Selecione Data")) &&
                                        (!btnCategoria.getText().toString().equals("Selecione Categoria")))
                                {
                                    btnGravar.setEnabled(true);
                                }

                            }
                        }
                );

            }
        });


        btnGravar = (Button) findViewById(R.id.btnGravar);
        btnGravar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v)
            {
                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.YEAR, Integer.parseInt(btnGetDate.getText().subSequence(6, 10).toString()));
                cal.set(Calendar.MONTH, Integer.parseInt(btnGetDate.getText().subSequence(3, 5).toString()) - 1);
                cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(btnGetDate.getText().subSequence(0, 2).toString()));
                long dateMili = cal.getTimeInMillis();

                addEvento(btnCategoria.getText().toString(), dateMili);
                btnGravar.setEnabled(false);
                btnCategoria.setText("Selecione Categoria");
                btnGetDate.setText("Selecione Data");
                setResult(RESULT_OK);
            }
        });

        btnGetDate = (Button) findViewById(R.id.btnPegarData);
        btnGetDate.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);
            }
        });

        mCursor = this.getContentResolver().query(EventoProvider.Evento.CONTENT_URI, null, null, null, null);
        this.startManagingCursor(mCursor);

        ListAdapter adapter;
        adapter = new myCursorAdapter(
                // O primeiro parametro eh o context.
                this,
                // O segundo, o layout de cada item.
                R.layout.list_evento,
                // O terceiro parametro eh o cursor que contem os dados
                // a serem mostrados
                mCursor,
                // o quarto parametro eh um array com as colunas do cursor
                // que serao mostradas
                new String[]{EventoProvider.Evento.TEXT, EventoProvider.Evento.DATA_EVE},

                // o quinto parametro eh um array (com o mesmo tamanho
                // do anterior) com os elementos que receberao
                // os dados.
                new int[]{R.id.categoria, R.id.DateComent});

        setListAdapter(adapter);
        registerForContextMenu(getListView());

        ListView lstView;
        lstView = getListView();
        lstView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {

                    }
                }
        );
    }

    // updates the date in the TextView
    private void updateDisplay()
    {
        String strMes = "0" + String.valueOf(mMonth+1);
        strMes = strMes.substring(strMes.length()-2);

        String strDia = "0" + String.valueOf(mDay);
        strDia = strDia.substring(strDia.length()-2);

        String strData;
        strData = strDia + "/" + strMes + "/" + String.valueOf(mYear);

        btnGetDate.setText(strData);

        if(btnGetDate.getText().toString() != ("Selecione Data") &&
                btnCategoria.getText().toString() != ("Selecione Categoria"))
        {
            btnGravar.setEnabled(true);
        }

    }

    // the  received when the user "sets" the date in the dialog
    private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

                public void onDateSet(DatePicker view, int year,
                                      int monthOfYear, int dayOfMonth) {
                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();
                }
            };


    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this,
                        mDateSetListener,
                        mYear, mMonth, mDay);
        }
        return null;
    }

    protected void addEvento(String text, long dat_evento)
    {
        ContentValues values = new ContentValues();
        values.put(EventoProvider.Evento.TEXT, text);
        values.put(EventoProvider.Evento.DATA_EVE, dat_evento);
        getContentResolver().insert(EventoProvider.Evento.CONTENT_URI, values);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)
    {
//      if (v.getId()==and R.id.)
//      {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle("Escolha uma ação"); //mCursor.getString(2)
        String[] menuItems = new String[]{"Editar","Excluir"};
        for (int i = 0; i<menuItems.length; i++)
        {
          menu.add(Menu.NONE, i, i, menuItems[i]);
        }
//      }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item)
    {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        int menuItemIndex = item.getItemId();
        String[] menuItems = new String[]{"Editar","Excluir"};
        String menuItemName = menuItems[menuItemIndex];

        if(menuItemName=="Excluir")
        {
            ExcluirEvento(Integer.parseInt(mCursor.getString(0)));
        }
        else if(menuItemName=="Editar")
        {

        }
        return true;
    }

    @Override
    public void onBackPressed()
    {
        try
        {
            if(!mCursor.isClosed())
                mCursor.close();
            if(!myCursor.isClosed())
                myCursor.close();
        }
        catch(Exception ex){}
        finally
        {
            this.finish();
        }
    }

    @Override
    public void onDestroy()
    {
        try
        {
            if(!mCursor.isClosed())
                mCursor.close();
            if(!myCursor.isClosed())
                myCursor.close();

        }
        catch(Exception ex){}
        finally
        {
            super.onDestroy();
        }
    }

    protected void ExcluirEvento(int Num_ID)
    {
        String strID = String.valueOf(Num_ID);
        getContentResolver().delete(EventoProvider.Evento.CONTENT_URI,"_id=?", new String[] {strID} );
    }

}
